package com.aaa.product.timer;


import com.aaa.product.dao.TbActInfMapper;
import com.aaa.product.dao.TbActProductMapper;
import com.aaa.product.dao.TbPrdExtendMapper;
import com.aaa.product.dao.TbPrdInfoMapper;
import com.aaa.product.entity.TbActInf;
import com.aaa.product.entity.TbActProduct;
import com.aaa.product.service.TbActInfService;
import com.aaa.product.service.TbActProductService;
import com.aaa.product.util.DateUtil;
import com.aaa.product.util.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.hibernate.validator.constraints.pl.REGON;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
import java.util.Set;

@Component
public class SeckillGoodsPushTask {

    @Resource
    TbActInfService tbActInfService;
    @Resource
    TbActProductService tbActProductService;
    @Resource
    TbActInfMapper tbActInfMapper;
    @Resource
    TbActProductMapper tbActProductMapper;

    @Resource
    RedisTemplate redisTemplate;

    /**
     * 定时操作
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void loadGoodsPushRedis(){
        /**
         *
         */
        List<Date> dateMenus = DateUtil.getDateMenus();

        for (Date dateMenu : dateMenus) {
            //  时间的字符串  yyyyMMddHH
//            String timespace = DateUtil.data2str(dateMenu,"yyyyMMddHH");
            String timespace = "activity";
            System.out.println(timespace);
            /**
             * 将已开始的活动商品添加进redis中
             *
             */
            QueryWrapper<TbActInf> wrapper = new QueryWrapper<>();
//            wrapper.le("start_time",new Date());
//            wrapper.ge("finish_time",new Date());

            // 获取当前命名空间下所有的商品的ID（key),每次查询排除掉之前存在的商品
            Set keys = redisTemplate.boundHashOps(timespace).keys();
            System.out.println("keys的值："+keys);
            if(null != keys && keys.size()>0){
                //排除
                wrapper.notIn("tid",keys);
            }

            //获取数据
            List<TbActInf> tbActInfs = tbActInfService.list(wrapper);
            // 存入redis
            for (TbActInf tbActInf : tbActInfs) {
                TbActInf tbActProducts = tbActInfMapper.getTbActProducts(tbActInf.getTid());
                redisTemplate.boundHashOps(timespace).put(tbActInf.getTid(),tbActProducts);
//                System.out.println("测试redis数据");
//                System.out.println(tbActInf.getTid());
            }
        }
    }

    /**
     * 定时操作
     */
    @Scheduled(cron = "0/5 * * * * ?")
    public void loadGoodsPushRedisProduct(){
        /**
         *
         */
        List<Date> dateMenus = DateUtil.getDateMenus();

        for (Date dateMenu : dateMenus) {
            //  时间的字符串  yyyyMMddHH
//            String timespace = "product_"+ DateUtil.data2str(dateMenu,"yyyyMMddHH");
            String timespace = "product";
            System.out.println(timespace);
            /**
             * 将已开始的活动商品添加进redis中
             *
             */
            QueryWrapper<TbActProduct> wrapper = new QueryWrapper<>();
            wrapper.le("start_time",new Date());
            wrapper.ge("finish_time",new Date());

            // 获取当前命名空间下所有的商品的ID（key),每次查询排除掉之前存在的商品
            Set keys = redisTemplate.boundHashOps(timespace).keys();
            System.out.println("keys的值："+keys);
            if(null != keys && keys.size()>0){
                //排除
                wrapper.notIn("pid",keys);
            }
            //获取数据
            List<TbActProduct> tbActProducts = tbActProductService.list(wrapper);
            // 存入redis
            for (TbActProduct tbActProduct : tbActProducts) {
                TbActProduct actProduct = tbActProductMapper.getActProductByPid(tbActProduct.getPid());
                redisTemplate.boundHashOps(timespace).put(actProduct.getPid(),actProduct);
                // 给每一个商品做队列
                redisTemplate.boundListOps("SeckillProductQueue_"+actProduct.getPid()).leftPushAll(getProductTid(actProduct.getNewStore(),actProduct.getPid()));

//                System.out.println("测试redis数据");
//                System.out.println(actProduct.getPid());
            }
        }
    }
//    /**
//     * 定时操作
//     */
//    @Scheduled(cron = "0 */1 * * * ?")
//    public void clearUserOrder(){
//        Date date = new Date();
//        System.out.println(date);
//        System.out.println("1 分钟执行一次");
//        redisTemplate.boundHashOps("UserOrder").delete();
//    }
//    /**
//     * 定时操作
//     */
//    @Scheduled(cron = "0 */2 * * * ?")
//    public void clearUserOrder2(){
//        Date date = new Date();
//        System.out.println(date);
//        System.out.println("2 分钟执行一次");
//        redisTemplate.boundHashOps("UserOrder").delete();
//    }
    /**
     * 获取每一个商品的 tid
     */
    public String[] getProductTid(Integer store,String tid){
        String[] ids = new String[store];
        for (int i = 0; i < ids.length; i++) {
            ids[i] = tid;
        }
        return ids;
    }
}
